Advances in semi-conductor processing and logic design have permitted an increase in the amount of logic that may be present on integrated circuit devices. As a result, computer system configurations have evolved from a single or multiple integrated circuits in a system to multiple cores, multiple hardware threads, and multiple logical processors present on individual integrated circuits. A processor or integrated circuit typically comprises a single physical processor die, where the processor die may include any number of cores, hardware threads, or logical processors. The ever-increasing number of processing elements—cores, hardware threads, and logical processors—on integrated circuits enables more tasks to be accomplished in parallel.
In multitasking environments, in which several applications access in parallel (shared hardware components, precautions have to be made to handle concurrent access issues in order to ensure proper execution of the applications.
Various techniques have been developed to address such issue. In the field of server/desktop systems, “hypervisors” have been introduced to enable use of resources shared among so-called logical partitions. Logical partitions separate a single physical server/desktop system into two or more virtual processing systems, with each virtual processing system able to run independent applications or workloads. Each logical partition acts as an independent virtual processing system, and can share the memory, processors, disks, and other I/O functions of the physical server/desktop system with other logical partitions. A logical partitioning functionality within a physical data processing system (hereinafter also referred to as a “platform”) allows for instance multiple copies of a single operating system (OS) or multiple heterogeneous operating systems to be simultaneously run on the single (physical) platform.
The act of creating and managing the partitions, as well as coordinating and managing the I/O functions of the partitions, was delegated to this module which acted as a buffer between the logical partitions and the specific I/O peripherals associated with the platform or system. The logical partitioning functionality (and associated management of the I/O) can typically be embodied in such systems by software layer, referred to generally as “hypervisors”. The software hypervisor layer facilitates and mediates the use of the I/O adapters by drivers in the partitions of the logically partitioned platform. For example, I/O operations typically involve access to system memory allocated to logical partitions. The coordinates specifying such memories in I/O requests from different partitions must be translated into a platform-wide consistent view of memory accompanying the I/O requests reaching the IOA. Such a translation (and effectively protection) service is rendered by the hypervisor and will have to be performed for each and every I/O request emanating from all the logical partitions in the platform.
Thus, the I/O requests are necessarily routed through the hypervisor layer. Being software, this of course potentially adds large amounts of overhead in providing the translation and other such mediation functions, since the hypervisor runs on a computing platform, and that platform may also run one or more of the OS images concurrently. Accordingly, running the I/O requests through the software hypervisor layer adds extraneous overhead due to the nature of the solution, and can induce performance bottlenecks.
US 2007/0192518 A1 for instance discloses an apparatus, which allows for managing I/O accesses for host subsystems that share I/O peripherals. Host subsystem ports receive I/O requests from and communicate with the plurality of platforms. A translation circuit, coupled to the host subsystem ports, identifies an I/O request from the host subsystem port as being associated with a particular host subsystem. A plurality of output ports are provided and are coupled to the peripheral I/O devices. A switching element is coupled to the translation circuit and to the output ports, and routes I/O requests to a particular output port. The management circuit manages the use of the output ports and brokers the physical usage of the ports. The apparatus is contained on physical devices distinct from the plurality of platforms.
US 2011/0119423 A1 for instance discloses Input/Output (IO) Virtualization (IOV) system, similar to that of US 2007/0192518 A1, which provides a mechanism for sharing computer peripheral devices or resources between multiple host computers by presenting a single resource multiple times to numerous host systems. Host interfaces are each coupled to one of a number of host computers. Each host interface includes a proxy, and each proxy comprises configuration data.
US 2006/0195618 A1 further discloses a mechanism applicable with an I/O adapter that directly supports adapter virtualization and does not require a hypervisor or other intermediary layer to be invoked on every I/O transaction is provided. The mechanism is provided for directly creating and initializing a virtual adapter and associated resources within a physical adapter. Each virtual adapter has an associated set of host side resources and adapter side resources and each virtual adapter is isolated from accessing the host side resources and adapter side resources that belong to another virtual or physical adapter.
The solutions known in the art require high software overhead and/or complex hardware implementations, which do not meet the constraints of embedded systems having limited processing resources and hardware complexity.